// 引入Three.js
import * as THREE from 'three';
// 引入gltf模型加载库GLTFLoader.js
import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader";
import { tag } from "./tag2D";

var model = new THREE.Group();//声明一个组对象，用来添加加载成功的三维场景
var loader = new GLTFLoader(); //创建一个GLTF加载器
loader.load("/model/granary/model.gltf", function (gltf) {//gltf加载成功后返回一个对象
    console.log('控制台查看gltf对象结构', gltf);
    //gltf.scene可以包含网格模型Mesh、光源Light等信息，至于gltf.scene是否包含光源，要看.gltf文件中是否有光源信息
    console.log('gltf对象场景属性', gltf.scene);

    //修改材质
    gltf.scene.traverse((object: any) => {
        if (object.type != "Mesh") {
            return;
        }
        object.material = new THREE.MeshLambertMaterial({
            map: object.material.map,
            color: object.material.color,//读取原来材质的颜色
        })
    })

    //搜索网格模型，并设置
    var group = gltf.scene.getObjectByName('粮仓');
    //console.log('粮仓', group);
    group.traverse(function (obj) {
        if (obj.type === 'Mesh') {
            var label = tag(obj.name);//把粮仓名称obj.name作为标签
            var pos = new THREE.Vector3();
            obj.getWorldPosition(pos);//获取obj世界坐标、
            // 粮仓世界坐标对应粮仓底部圆心位置，如果标签像标注在粮仓底部，需要加上粮仓整体高度
            if(obj.parent.name=="立筒仓"){
                pos.y+=36;//加上粮仓顶部高度
            }else if(obj.parent.name=="浅圆仓"){
                pos.y+=20;
            }else if(obj.parent.name=="平房仓"){
                pos.y+=17;
            }
            label.position.copy(pos);//标签标注在obj世界坐标
            model.add(label);//标签插入model组对象中         
        }
    })
    console.log(group)
    //把gltf.scene中的所有模型添加到model组对象中
    model.add(gltf.scene);
})

export { model }